package com.pro01.apirednote.service;

import com.pro01.apirednote.pojo.Content;
import com.pro01.apirednote.pojo.PageResult;
import com.pro01.apirednote.pojo.Result;

import java.util.List;

public interface ElasticsearchService {
    
    /**
     * 创建内容索引
     */
    void createContentIndex();
    
    /**
     * 将内容添加到索引
     */
    void indexContent(Content content);
    
    /**
     * 更新索引中的内容
     */
    void updateIndexedContent(Content content);
    
    /**
     * 从索引中删除内容
     */
    void deleteIndexedContent(Long contentId);
    
    /**
     * 搜索内容
     */
    Result<PageResult<Content>> searchContent(String keyword, int pageNum, int pageSize);
    
    /**
     * 使用中文语义检索内容
     * @param query 查询文本
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param minScore 最小相似度分数（0-1之间）
     * @return 检索结果
     */
    Result<PageResult<Content>> semanticSearchContent(String query, int pageNum, int pageSize, double minScore);
    
    /**
     * 为内容生成向量并更新到索引
     * @param content 内容对象
     * @return 是否更新成功
     */
    boolean updateContentVector(Content content);
    
    /**
     * 批量更新内容向量
     * @param contents 内容列表
     * @return 更新成功的数量
     */
    int batchUpdateContentVectors(List<Content> contents);
    
    /**
     * 手动刷新内容索引
     * @return 是否成功
     */
    boolean refreshContentIndex();
    
    /**
     * 检查内容是否存在于索引中
     * @param contentId 内容ID
     * @return 是否存在
     */
    boolean isContentIndexed(Long contentId);
    
    /**
     * 重建整个内容索引
     * @return 重建的文档数量
     */
    int rebuildContentIndex();
    
    /**
     * 获取RestClient实例，用于直接操作ElasticSearch API
     * @return RestClient实例
     */
    org.elasticsearch.client.RestClient getRestClient();
} 